home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / librarys / quicklbs.1 < prev   
Internet Message Format  |  1989-03-16  |  7KB

  1. Path: xanth!lll-winken!ames!mailrus!ulowell!page
  2. From: page@swan.ulowell.edu (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i077:  quicklib - allow quick bmap-loads for amigabasic
  5. Message-ID: <12300@swan.ulowell.edu>
  6. Date: 16 Mar 89 19:55:01 GMT
  7. Organization: University of Lowell, Computer Science Dept.
  8. Lines: 271
  9. Approved: page@swan.ulowell.edu
  10.  
  11. Submitted-by: cosell@bbn.com (Bernie Cosell)
  12. Posting-number: Volume 89, Issue 77
  13. Archive-name: libraries/quicklib-bas.1
  14.  
  15. #    This is a shell archive.
  16. #    Remove everything above and including the cut line.
  17. #    Then run the rest of the file through sh.
  18. #----cut here-----cut here-----cut here-----cut here----#
  19. #!/bin/sh
  20. # shar:    Shell Archiver
  21. #    Run the following text with /bin/sh to create:
  22. #    quicklib.doc
  23. #    quicklib.bas
  24. # This archive created: Thu Mar 16 14:51:54 1989
  25. cat << \SHAR_EOF > quicklib.doc
  26. quicklib.bas is a little routine to allow quick bmap-loads for
  27. AmigaBasic.  What it does is ask you which routines from the library
  28. you're using, and then writes a subroutine (which you later merge into
  29. your main program) which will create a tiny .bmap file on the fly in
  30. RAM:, and then load it in with an appropriate "LIBRARY" call.  Thus, in
  31. one quick "CALL" you're ready to go, and it is much faster than loading
  32. the actual, full .bmap file and also makes your program independent of
  33. the actual location of the .bmap files on the target system: folks
  34. USING your program won't have to worry about copying the .bmap files
  35. into the right directory (or, in fact, even knowing that such things as
  36. ".bmap files" exist at all).
  37.  
  38. This is mostly just a typein of the program described in Amazing
  39. Computing, Vol 4 No 3, March 1989, "Breaking the Bmap Barrier" by
  40. Robert D'Asto.  I fiddled with the program a little bit, just to clean
  41. a thing up here or there, but the program is, for all intents and
  42. purposes, just as Robert wrote it.   Amazing Computing is published by
  43. PiM Publications, PO Box 869, Fall River, MA 02722; 508-678-4200.
  44. This program (and this super-brief summary of Robert's article) are
  45. reproduced with permission.
  46.  
  47. Bernie Cosell, cosell@bbn.com, 12 March 89
  48. SHAR_EOF
  49. cat << \SHAR_EOF > quicklib.bas
  50. '* * * * * * * * * * * * * * 
  51. '*                         *
  52. '*    QUICK_LIB            *
  53. '*                         *
  54. '*                         *
  55. '*  Source code            *
  56. '*      by                 *
  57. '*  Robert D'Asto          *
  58. '*                         *
  59. '* * * * * * * * * * * * * *
  60.  
  61. '************************************
  62. '*
  63. '* copyright 1988 PiM Publications
  64. '*
  65. '* this program appeared in the March '89
  66. '* issue of Amazing Computing [PO Box 869,
  67. '* Fall River, MA 02722,  508-678-4200]
  68. '*   reproduced and distributed with
  69. '*      permission
  70. '*
  71. '*  Typed in and somewhat tweaked up by
  72. '*      Bernie Cosell (cosell@bbn.com)
  73. '*  The version in AC worked fine, so if this
  74. '*  one doesn't, I screwed up either in my typing
  75. '*  or in my "improvements"
  76. '*
  77. '***************************************
  78.  
  79.  
  80. ON BREAK GOSUB endit
  81. BREAK ON
  82.  
  83. MENU 1,0,1," Quick Lib "
  84. MENU 1,1,1," Load bmap "
  85. MENU 1,2,1," Quit      "
  86.  
  87. MENU 2,0,0,"           "
  88. MENU 3,0,0,"           "
  89. MENU 4,0,0,"           "
  90.  
  91. ON MENU GOSUB MenuSort
  92. MENU ON
  93.  
  94. WHILE -1
  95.   SLEEP
  96. WEND
  97.  
  98. MenuSort:
  99.   IF MENU(1) = 1 THEN GOSUB Loadbmap
  100.   IF MENU(1) = 2 THEN GOSUB endit
  101. RETURN
  102.  
  103. Loadbmap:
  104.   bmap.name$ = ""
  105.   lib.name$ = ""
  106.   subname$ = ""
  107.   Q$ = CHR$(34)
  108.   CLS
  109. startload:
  110.   PRINT
  111.   INPUT "Name of library to load "; b$
  112.   IF RIGHT$(b$, 5) <> ".bmap" THEN
  113.     IF RIGHT$(b$, 8) = ".library" THEN
  114.       b$ = LEFT$(b$, LEN(b$) - 8) + ".bmap"
  115.     ELSE
  116.       PRINT
  117.       PRINT "Spelling is incorrect or file"
  118.       PRINT "is misnamed.  A bmap file name"
  119.       PRINT "must end with " + Q$ + ".bmap" + Q$ + "."
  120.       GOTO startload
  121.     END IF
  122.   END IF
  123.   
  124.   ON ERROR GOTO CatchError
  125.   GotError = 0
  126.  
  127.   OPEN b$ FOR INPUT AS 1
  128.   IF GotError THEN
  129.     GotError = 0
  130.     OPEN ":" + b$ FOR INPUT AS 1
  131.     IF GotError THEN
  132.       GotError = 0
  133.       OPEN "libs:" + b$ FOR INPUT AS 1
  134.       IF GotError THEN
  135.         ON ERROR GOTO 0
  136.         PRINT
  137.         PRINT "Can't find bmap for library " + Q$ + b$ + Q$
  138.         GOTO startload
  139.       END IF
  140.     END IF
  141.   END IF
  142.   ON ERROR GOTO 0
  143.         
  144.   bmap$ = INPUT$ (LOF(1), 1)
  145.   CLOSE 1
  146.   
  147. 'extract name of library from
  148. 'full pathname entered above
  149.   startpoint% = LEN(b$) - 5
  150.   namelen% = 1
  151.   control% = 100
  152.  
  153.   WHILE startpoint% > 0 AND 96 < control%  AND control% < 123  
  154.     control% = ASC(MID$(b$, startpoint%, 1))
  155.     startpoint% = startpoint% - 1
  156.     namelen% = namelen% + 1
  157.   WEND
  158.  
  159.   IF control% <= 96 OR 123 <= control% THEN
  160.     n$ = MID$(b$, startpoint%+2, namelen%-2)
  161.   ELSE
  162.     n$ = MID$(b$, startpoint%+1, namelen%-1)
  163.   END IF  
  164.   
  165. 'use name extracted above to
  166. 'create appropriate names for
  167. 'library, bmap and subprogram
  168.   bmap.name$ = n$ + ".bmap"
  169.   lib.name$ = n$ + ".library"
  170.   subname$ = "Init." + n$ + ".lib"
  171.   
  172. 'call the GetRoutine sub, passing the
  173. 'complete bmap and above names to it
  174.   GetRoutine bmap$, lib.name$, bmap.name$, subname$
  175.   NewCycle
  176. RETURN
  177.  
  178. endit:
  179.   MENU RESET
  180.   END
  181. RETURN
  182.  
  183.  
  184. ' Little bit of machinery to allow errors to be caught easily
  185. CatchError:
  186.   GotError = -1
  187. RESUME NEXT
  188.   
  189.   
  190. SUB GetRoutine (bmap$, lib$, bn$, s$) STATIC
  191.   CLS
  192. Start:
  193.   routine$ = ""
  194.   fd$ = ""
  195.   Q$ = CHR$(34)
  196.  
  197.   PRINT
  198.   PRINT "Name of first " + lib$ + " routine"
  199.   INPUT "you wish to use "; routine$
  200.   IF routine$ = "" THEN Start
  201.   
  202. Again:
  203.   
  204. 'find routine within the bmap
  205.   offset% = INSTR(bmap$, routine$ + CHR$(0))
  206.   
  207.   IF offset% = 0 THEN
  208.     PRINT "I can't find " + Q$ + routine$ + Q$ + " in this library."
  209.     PRINT "Check spelling."
  210.     PRINT
  211.     GOTO ReType
  212.   END IF
  213.   
  214.   fd$ = fd$ + "  fd$ = fd$ + " + Q$ + routine$ + Q$
  215.   fd$ = fd$ + " + chr$(0)" + CHR$(10) + "  "
  216.   length% = LEN(routine$)+1
  217.   count% = offset% + length%
  218.   fd$ = fd$ + "fd$=fd$+"
  219.   
  220. 'extract offset and parameter data
  221. 'for this routine from the bmap
  222.   char$ = ""
  223.   WHILE char$ <> CHR$(0)
  224.     char$ = MID$(bmap$, count%, 1)
  225.     fd$ = fd$ + "CHR$(" + MID$(STR$(ASC(char$)),2) + ")" + "+"
  226.     count% = count% + 1
  227.   WEND
  228.   
  229.   newlength% = LEN(fd$) - 1
  230.   fd$ = LEFT$(fd$, newlength%)
  231.   fd$ = fd$ + CHR$(10)
  232.   
  233.   PRINT
  234.   PRINT "Thank you.  ";
  235. ReType:
  236.   PRINT "Next routine "
  237.   INPUT "(if none press RETURN) ", routine$
  238.   IF routine$ = "" THEN
  239.     GOTO GoOn
  240.   ELSEIF routine$ = CHR$(127) THEN
  241.     GOTO Start
  242.   ELSE
  243.     GOTO Again
  244.   END IF
  245.   
  246. GoOn:
  247.   final.length% = LEN(fd$) - 1
  248.   fd$ = LEFT$(fd$, final.length%)
  249.   PRINT
  250.   INPUT "name of destination file "; destfile$
  251.   IF destfile$ = "" THEN GoOn
  252.   F$ = " for output as 1"
  253.   OPEN destfile$ FOR OUTPUT AS 1
  254.   PRINT #1, ""
  255.   PRINT #1, "SUB " + s$ + " STATIC"
  256.   PRINT #1, fd$
  257.   PRINT #1, "  OPEN " + Q$ + "RAM:" + bn$ + Q$ + F$
  258.   PRINT #1, "  PRINT #1, fd$;"
  259.   PRINT #1, "  CLOSE 1"
  260.   PRINT #1, "  LIBRARY " + Q$ + "RAM:" + lib$ + Q$
  261.   PRINT #1, "END SUB"
  262.   CLOSE 1
  263.   EXIT SUB
  264. END SUB
  265.  
  266. SUB NewCycle STATIC
  267.   CLS
  268.   Q$ = CHR$(34)
  269.   PRINT "If you wish to use routines"
  270.   PRINT "from another library select"
  271.   PRINT Q$ + "Load bmap" + Q$ + "from menu."
  272.   EXIT SUB
  273. END SUB
  274.  
  275.  
  276. SHAR_EOF
  277. #    End of shell archive
  278. exit 0
  279. -- 
  280. Bob Page, U of Lowell CS Dept.  page@swan.ulowell.edu  ulowell!page
  281. Have five nice days.
  282.